package com.rong.juc_test.juc_p6_p7;

/**
 * 对象内存布局
 */
public class ObjectHeadDemo {

    public static void main(String[] args) {
        // new一个对象 占多少内存？
        // 对象头中对象标记和（类元信息）类型指针各占8个字节
        Object o = new Object();
        System.out.println(o.hashCode()); // 这个对象记录在内存什么地方 --对象头的对象标记MarkWord
        synchronized (o){

        }
        System.gc(); // 手动收集垃圾。。。15次可以从新生代--养老区

        // 三个不同的对象但是均来自同一个模板，
        // 对象指向它的类元数据的指针，虚拟机通过这个指针来确定这个对象是哪个类的实例
        Custom c1 = new Custom();
        Custom c2 = new Custom();
        Custom c3 = new Custom();
    }
}

// 无属性时时只有一个对象头的实例对象 16字节
//  如果有属性时 16+4+1=21字节 对齐填充 满足8的整数倍 24字节
class Custom{

    // 类中定义的属性叫实例数据
    int id; // 占4字节
    Boolean flag; // 占1字节

}